home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1996 July / 64er_Magazin_96-07_1996_Markt__Technik_de_Side_A.d64 / player source < prev    next >
Text File  |  2022-10-26  |  30KB  |  1,450 lines

  1. ;64'er Music Player v.1.0
  2. ;All Coding and Design by THE SYNDROM
  3. ;---------------------------------------
  4. ;---------------------------------------
  5. ;editor version
  6. ;---------------------------------------
  7.          *= $1000
  8.  
  9.          jmp init
  10.          jmp play
  11.          jmp play2
  12. ;---------------------------------------
  13. hardval  .byte $0f ;(xy: x=8->keep ad
  14.                    ;     x=0-> ad=y)
  15.  
  16. filtyp   .byte $00
  17. filcon   .byte $00
  18. filtlo   .byte $00
  19. filthi   .byte $00
  20. volume   .byte $00
  21. resonance .byte $00
  22. speed    .byte $00
  23. speed1   .byte $00
  24. multi    .byte $00
  25. identify .byte $00
  26. fade     .byte $00
  27. fadetime .byte $00
  28. nofi     .byte $00
  29. filfreql .byte $00
  30. filfreqh .byte $00
  31. fcont    .byte $00
  32. filconf  .byte $00
  33. filtaddl .byte $00
  34. filtaddh .byte $00
  35. filtfrm  .byte $00
  36. filpos   .byte $00
  37. frqf     .byte $00
  38.          .text "-player & music by the "
  39.          .text "syndrom!-"
  40. flo      .byte $00
  41. fhi      .byte $00
  42. wspeed   .byte $00,0
  43.          .byte $00,0
  44. ;---------------------------------------
  45. dur      .byte $00
  46. durat    .byte $00
  47. snd      .byte $00
  48. ad       .byte $00
  49. sr       .byte $00
  50. on       .byte $00
  51. vdir     .byte $00
  52.          .byte $00,0,0,0,0,0,0  ;7 bytes
  53.          .byte $00,0,0,0,0,0,0  ;7 bytes
  54. trpos    .byte $00
  55. trackl   .byte $00
  56. trackh   .byte $00
  57. secpos   .byte $00
  58. wave     .byte $00
  59. filcont  .byte $00
  60. pupos    .byte $00
  61.          .byte $00,0,0,0,0,0,0  ; -"-
  62.          .byte $00,0,0,0,0,0,0   ; -"-
  63. andor    .byte $00
  64. cont     .byte $00
  65. trpose   .byte $00
  66. fine     .byte $00
  67. wavepos  .byte $00
  68. switch   .byte $00
  69. nopu     .byte $00
  70.          .byte $00,0,0,0,0,0,0  ; -"-
  71.          .byte $00,0,0,0,0,0,0  ; -"-
  72. vspeed   .byte $00
  73. vaddl    .byte $00
  74. vaddh    .byte $00
  75. svol     .byte $00
  76. glideh   .byte $00
  77. glidel   .byte $00
  78. gll      .byte $00
  79.          .byte $00,0,0,0,0,0,0  ; -"-
  80.          .byte $00,0,0,0,0,0,0  ; -"-
  81. glh      .byte $00
  82. glto     .byte $00
  83. glfrom   .byte $00
  84. gldel    .byte $00
  85. gldeh    .byte $00
  86. noteok   .byte $00
  87. drum     .byte $00
  88.          .byte $00,0,0,0,0,0,0  ; -"-
  89.          .byte $00,0,0,0,0,0,0  ; -"-
  90. pulslo   .byte $00
  91. pulshi   .byte $00
  92. pulsfrm  .byte $00
  93. pulsaddl .byte $00
  94. pulsaddh .byte $00
  95. switch2  .byte $00
  96. cut      .byte $00
  97.          .byte $00,0,0,0,0,0,0  ; -"-
  98.          .byte $00,0,0,0,0,0,0  ; -"-
  99. sndn     .byte $00
  100. effhi    .byte $00
  101. efflo    .byte $00
  102. pcont    .byte $00
  103. wvspeed  .byte $00
  104. hardon   .byte $00
  105. notev    .byte $00
  106.          .byte $00,0,0,0,0,0,0  ; -"-
  107.          .byte $00,0,0,0,0,0,0  ; -"-
  108. wvspeed1 .byte $00
  109. vspeed1  .byte $00
  110. vaddl1   .byte $00
  111. vaddh1   .byte $00
  112. vilo     .byte $00
  113. vihi     .byte $00
  114. vifirst  .byte $00
  115.          .byte $00,0,0,0,0,0,0  ; -"-
  116.          .byte $00,0,0,0,0,0,0  ; -"-
  117.  
  118. filcont1 .byte $fe
  119. wavexpos .byte $00
  120. xwvspeed .byte $00
  121.          .byte $00
  122.          .byte $00
  123.          .byte $00
  124.          .byte $00
  125.          .byte $fd,0,0,0,0,0,0  ; -"-
  126.          .byte $fb,0,0,0,0,0,0  ; -"-
  127.  
  128.  
  129.  
  130.  
  131. mark     .byte $00
  132.  
  133.  
  134.  
  135.  
  136. ;---------------------------------------
  137. init     asl a
  138.          asl a
  139.          asl a
  140.          tay
  141.          ldx #$00
  142.          txa
  143. initcl   sta dur,x     ;clear data
  144.          inx
  145.          cpx #mark-dur
  146.          bne initcl
  147.          ldx #0
  148. initcl2  sta filtyp,x
  149.          inx
  150.          cpx #frqf-filtyp
  151.          bne initcl2
  152.          ldx #$00      ;prepare pointers
  153. trfill   lda trakk,y
  154.          sta trackl,x
  155.          lda trakk+1,y
  156.          sta trackh,x
  157.          lda #9        ;reset voices
  158.          sta $d404,x
  159.          sta on,x
  160.          lda #0
  161.          sta ad,x
  162.          sta sr,x
  163.          lda #$02      ;startvalues
  164.          sta durat,x
  165.          lda #$ff
  166.          sta wvspeed1,x
  167.          lda #$80  ;x0,x7,xe for fvoice
  168.          sta filcon
  169.          lda #1
  170.          sta hardon,x
  171.          sta andor,x
  172.          iny
  173.          iny
  174.          txa
  175.          clc
  176.          adc #7        ;0-7-14-loop
  177.          tax
  178.          cpx #21
  179.          bne trfill
  180.          lda trakk,y
  181.          pha
  182.          lsr a
  183.          lsr a
  184.          lsr a
  185.          lsr a
  186.          sta wspeed
  187.          pla
  188.          and #$0f
  189.          sta wspeed+1
  190.          lda #3
  191.          sta speed1
  192.          lda trakk+1,y
  193.          and #$0f
  194.          sta volume
  195.          lda #1
  196.          sta filcont
  197.          asl a
  198.          sta filcont+7
  199.          asl a
  200.          sta filcont+14
  201.          lda #$fe
  202.          sta filcont1
  203.          lda #$fd
  204.          sta filcont1+7
  205.          lda #$fb
  206.          sta filcont1+14
  207.          lda #0
  208.          sta filconf
  209.          sta wspeedc+1
  210.          rts
  211. ;---------------------------------------
  212. play     lda $f8      ;save used
  213.          pha          ;zeropage to stack
  214.          lda $f9
  215.          pha
  216.          dec speed1  ;main-speed-control
  217.          bpl new1
  218. wspeedc  lda #0
  219.          eor #1
  220.          sta wspeedc+1
  221.          tax
  222.          lda wspeed,x
  223.          sta speed
  224.          sta speed1
  225. new1     ldx #0
  226.          jsr voice
  227.          ldx #7
  228.          jsr voice
  229.          ldx #14
  230.          jsr voice
  231.          lda fade     ;volume-fade
  232.          beq nofade   ;active ?
  233.          dec fadetime
  234.          lda fadetime
  235.          bne nofade
  236. ftime    lda #0       ;direct code
  237.          sta fadetime ;accessed
  238.          lda volume
  239.          clc
  240.          adc fade
  241.          sta volume
  242.          cmp #$ff     ;lower stop
  243.          beq fadestop
  244.          cmp #$10
  245.          bne nofade   ;upper stop
  246.          lda #$0f
  247.          sta volume
  248.          bne nofade
  249.  
  250. fadestop lda #0
  251.          sta fade
  252.          sta volume
  253. nofade   lda volume    ;permanent
  254.          ora filtyp    ;controls
  255.          sta $d418
  256.          lda filconf
  257.          ora resonance
  258.          sta $d417
  259.          lda filfreql
  260.          sta $d415
  261.          lda filfreqh
  262.          sta $d416
  263.          pla           ;rewrite zero-
  264.          sta $f9       ;page
  265.          pla
  266.          sta $f8
  267.          rts
  268. ;---------------------------------------
  269. voice    lda on,x      ;voice active?
  270.          bne voion
  271.          rts
  272. voion    lda speed1  ;new duration-
  273.          cmp speed   ;frame ?
  274.          beq new     ;
  275.  
  276.          jmp voice3;hr-check for low
  277.                    ;speeds necessary
  278. new      dec durat,x ;new command-
  279.          beq new3    ;frame ?
  280.          jmp voice3
  281. ;---------------------------------------
  282. ;track-control-routines
  283. ;---------------------------------------
  284. ;commands
  285.          ;$ff xx    loop xx
  286.          ;$fe       stop voice
  287.          ;$fd xx    transpose +xx
  288.          ;$fc xx    transpose -xx
  289.          ;$fb xx    fadein  xx
  290.          ;$fa xx    fadeout xx
  291.          ;$ex       volume x
  292. ;---------------------------------------
  293. new3     lda trackl,x ;set pointers
  294.          sta $f8
  295.          lda trackh,x
  296.          sta $f9
  297. ;---------------------------------------
  298. ;check track-commands
  299. ;---------------------------------------
  300. read
  301.          ldy trpos,x
  302.          lda ($f8),y
  303.          bpl nocom   ;sector or command?
  304.          cmp #$ff         ;end
  305.          bne com1
  306.          iny
  307.          lda ($f8),y
  308.          sta trpos,x
  309.          tay
  310.          jmp read+3
  311. com1     cmp #$fe         ;stop
  312.          bne com2
  313.          lda #0
  314.          sta on,x
  315.          lda #1
  316.          sta cut,x
  317.          rts
  318. com2     cmp #$fd         ;tr+xx
  319.          bne com3
  320.          iny
  321.          lda ($f8),y
  322. dazu     sta trpose,x
  323.          iny
  324.          tya
  325.          sta trpos,x
  326.          jmp read+3
  327. com3     cmp #$fc         ;tr-xx
  328.          bne com4
  329.          iny
  330.          lda ($f8),y
  331.          eor #$ff
  332.          clc
  333.          adc #$01
  334.          jmp dazu
  335. com4     cmp #$fb         ;fd+xx
  336.          bne com5
  337.          iny
  338.          lda ($f8),y
  339.          sta fadetime
  340.          sta ftime+1
  341.          lda #1
  342.          sta fade
  343.          jmp dazu+3
  344. com5     cmp #$fa         ;fd-xx
  345.          bne com6
  346.          iny
  347.          lda ($f8),y
  348.          sta fadetime
  349.          sta ftime+1
  350.          lda #$ff
  351.          sta fade
  352.          jmp dazu+3
  353. com6     cmp #$e0
  354.          bcc com7
  355.          cmp #$f0         ;mvl.x
  356.          bcs com7
  357.          and #$0f
  358.          sta volume
  359.          inc trpos,x
  360. com7     jmp read
  361. ;---------------------------------------
  362. ;Sector-control
  363. ;commands  $fd.xx   dur xx
  364.           ;$fc.xx   snd xx
  365.           ;$fe      cont(---)
  366.           ;$fb      gate
  367.           ;$fa      switch
  368.           ;$f9      cut
  369. ;---------------------------------------
  370. nocom    tay          ;set pointers
  371.          lda seclo,y
  372.          sta $f8
  373.          lda sechi,y
  374.          sta $f9
  375. read3    ldy secpos,x
  376.          lda ($f8),y  ;command or
  377.          cmp #$c0     ;note ?
  378.          bcs nnote    ;
  379.          pha
  380.          lda #0
  381.          sta gll,x
  382.          sta glh,x
  383.          sta glidel,x
  384.          sta glideh,x
  385.          sta vspeed,x
  386.          sta vilo,x
  387.          sta vihi,x
  388.  
  389.          pla
  390.          jmp note
  391. nnote
  392.          cmp #$ff          ;end
  393.          bne scom1
  394.          inc trpos,x
  395.          lda #0
  396.          sta secpos,x
  397.          lda switch,x ;no cut if switch
  398.          bne nowrap   ;is active
  399.          lda #$ff
  400.          sta wvspeed1,x
  401.          lda #$00
  402.          sta wave,x
  403. nowrap   jmp new3
  404. scom1    cmp #$f9
  405.          bcs scom1a
  406.          jmp scom7
  407. scom1a   cmp #$fe     ;---
  408.          bne scom2
  409. note3    iny
  410.          tya
  411.          sta secpos,x
  412.          lda #1
  413.          sta cont,x
  414.          jmp note2
  415. scom2    cmp #$fd     ;dur.xx
  416.          bne scom3
  417.          iny
  418.          lda ($f8),y
  419.          sta dur,x
  420.          sta durat,x
  421. dazu4    iny
  422.          tya
  423.          sta secpos,x
  424.          jmp read3+3
  425. scom3    cmp #$fc     ;snd.xx
  426.          bne scom4
  427.          iny
  428.          lda ($f8),y
  429.          sta snd,x
  430.          sta sndn,x
  431.          lda #0
  432.          sta wavexpos,x
  433.          jmp dazu4
  434. scom4    cmp #$fb     ;gate
  435.          bne scom5
  436.          lda #1
  437.          eor andor,x
  438.          sta andor,x
  439.          jmp note3
  440.  
  441.  
  442.  
  443. scom5    cmp #$fa     ;switch
  444.          bne scom6
  445.          lda #1
  446.          eor switch,x
  447.          sta switch,x
  448. nofx     inc secpos,x
  449.          jmp read3
  450.  
  451. scom6    cmp #$f9     ;cut
  452.          bne scom7
  453.          lda dur,x
  454.          sta durat,x
  455.          lda #8       ;resets voice
  456.          sta $d404,x  ;+ voice routines
  457.          sta wave,x  ;to save rastertime
  458.          lda #$00
  459.          sta $d405,x
  460.          sta $d406,x
  461.          sta ad,x
  462.          sta sr,x
  463.          lda #$ff
  464.          sta wvspeed1,x
  465.          lda #1
  466.          sta cut,x
  467.          inc secpos,x
  468.          jmp hrcheck
  469. scom7    and #$3f    ;supercommands
  470.          tay
  471.          lda commtab1,y
  472.          sta effhi,x
  473.          lda commtab2,y
  474.          sta efflo,x
  475.          lda commtab,y
  476.          asl a
  477.          tay
  478.          lda commtab3,y
  479.          sta jump+1
  480.          lda commtab3+1,y
  481.          sta jump+2
  482.  
  483. jump     jmp read3
  484.  
  485.  
  486. note     cmp #$60   ;count notevalue
  487.          bcc normal
  488.          sec
  489.          sbc #$60
  490. normal   clc
  491.          adc trpose,x
  492.          sta notev,x ;new note
  493.          sta noteok,x
  494.          inc secpos,x
  495. note2
  496.  
  497.          lda dur,x  ;previous note
  498.          sta durat,x
  499.          lda switch,x
  500.          bne swon
  501.          lda cont,x
  502.          bne swon
  503.          lda #0
  504.          sta cut,x
  505.          lda #1
  506.          sta andor,x
  507.          ldy snd,x
  508.                     ;this frame
  509.          lda adtab,y;sets the new
  510.          sta ad,x   ;adsr-settings
  511.          sta $d405,x;= beginning of a
  512.          lda svol,x
  513.          beq ss1
  514.          lda srtab,y
  515.          and #$0f
  516.          ora svol,x
  517.          bne ss2
  518. ss1      lda srtab,y;new note = max.
  519. ss2      sta sr,x   ;rastertime
  520.          sta $d406,x
  521.          lda adtab,y;sets the new
  522.          sta ad,x   ;adsr-settings
  523.          sta $d405,x;= beginning of a
  524.          jmp noconti
  525. ss       lda cont,x
  526.          beq noconti
  527.  
  528. swon     jsr play3
  529.          jsr sid
  530.          jmp nocont
  531. noconti  lda wavexpos,x
  532.          bne supwav
  533.          lda wavptab,y
  534. supwav   sta wavepos,x
  535.          tya
  536.          pha
  537.          ldy wavepos,x ;sets wave
  538.          lda wavetab,y ;(first row)
  539.          pha
  540.          and #$f7
  541.          sta wave,x
  542.          sta $d404,x   ;check for
  543.          pla           ;drum-mode
  544.          and #$08
  545.          sta drum,x
  546.          beq nodrum2
  547.          lda freqtab,y
  548.          sta $d401,x
  549.          sta noteok,x
  550.          lda #0
  551.          sta $d400,x
  552.          jmp nonon
  553. nodrum2  lda freqtab,y
  554.          clc
  555.          adc notev,x
  556.          sta noteok,x
  557.          tay
  558.          lda frqlo,y
  559.          clc
  560.          adc fine,x
  561.          sta $d400,x
  562.          lda frqhi,y
  563.          adc #0
  564.          sta $d401,x
  565. nonon    pla
  566.          tay
  567.          lda wavexpos,x
  568.          beq slow2
  569.          lda xwvspeed,x
  570.          jmp slow1
  571.  
  572. slow2    lda efftab,y
  573.          and #$0f
  574. slow1    sta wvspeed,x
  575.          sta wvspeed1,x
  576.          inc wavepos,x
  577.          lda pcont,x
  578.          bne filll
  579.          lda #0
  580.          sta nopu,x
  581. ;---------------------------------------
  582.          lda pulptab,y  ;pulse-routine
  583.          tay            ;init
  584.          clc
  585.          adc #1
  586.          sta pupos,x
  587.          lda pulstab1,y
  588.          sta pulshi,x
  589.          sta $d403,x
  590.          lda pulstab2,y
  591.          sta pulslo,x
  592.          sta $d402,x
  593.          lda #0
  594.          sta pulsfrm,x
  595.          ldy snd,x
  596. ;---------------------------------------
  597. filll
  598.          cpx filcon
  599.          bne nocont
  600.  
  601.          lda fcont
  602.          bne nocont
  603.  
  604.          lda #0
  605.          sta nofi
  606.          sta filtfrm
  607.          lda filptab,y
  608.          tay
  609.          clc
  610.          adc #1
  611.          sta filpos
  612.          lda frqf
  613.          beq fillt
  614.          ldy flo
  615.          sty filtlo
  616.          tya
  617.          and #7
  618.          sta filfreql
  619.          lda fhi
  620.          sta filthi
  621.          jmp fillt2
  622.  
  623. fillt    lda filttab1,y
  624.          sta filthi
  625.          pha
  626.          lda filttab2,y
  627.          sta filtlo
  628.          tay
  629.          and #7
  630.          sta filfreql
  631.          pla
  632. fillt2   lsr a
  633.          ror filtlo
  634.          lsr a
  635.          ror filtlo
  636.          lsr a
  637.          ror filtlo
  638.          lda filtlo
  639.          sta filfreqh
  640.          sty filtlo
  641.  
  642.  
  643.  
  644.  
  645.  
  646. nocont   lda #0
  647.          sta cont,x
  648.  
  649.          lda hardon,x
  650.          beq hrcheck
  651.  
  652.          lda #1
  653.          sta andor,x
  654.  
  655. hrcheck  ldy secpos,x  ;checking next
  656. hrcheck2 lda ($f8),y   ;sectordata for
  657.          cmp #$ff      ;hardrestart on
  658.                        ;or off
  659.          beq onyes  ;user can manipulate
  660. noend    cmp #$60   ;this (onyes/onno)
  661.          bcc onyes  ;(new sector hr)
  662.          cmp #$c0
  663.          bcc onno
  664.          cmp #$fe
  665.          beq onno
  666.          cmp #$fb
  667.          beq onno
  668.          cmp #$f9
  669.          beq onno
  670.          cmp #$fc
  671.          bne swi1
  672.          iny
  673.          lda ($f8),y
  674.          sta sndn,x
  675.          dey
  676.          lda #$fc
  677. swi1
  678.          cmp #$fa
  679.          bne swi
  680.          lda #1
  681.          eor switch,x
  682.          sta switch2,x
  683.          jmp plus1
  684.  
  685.  
  686. swi      cmp #$fc
  687.          bcc plus1
  688.          iny
  689. plus1    iny
  690.          bne hrcheck2
  691.  
  692. onno     lda #0
  693.          beq hrset
  694. onyes    lda #1
  695. hrset    sta hardon,x
  696.          lda switch2,x
  697.          beq ond
  698.          lda #0
  699.          sta hardon,x
  700. ond
  701.          rts
  702. ;---------------------------------------
  703. ;hard-restart-routine
  704. ;---------------------------------------
  705. voice3   lda speed
  706.          bne nospeed0
  707.          lda durat,x
  708.          cmp #$04
  709.          bcs nichts
  710.          cmp #$01
  711.          beq frame1
  712.                     ;frame 2+1
  713. frame2
  714.  
  715.          lda hardon,x
  716.          beq nichts
  717.          jsr play3
  718.  
  719.          lda sr,x
  720.          and #$f0
  721.          sta $d406,x
  722.          lda hardval
  723.          bpl hrsett
  724.          lda ad,x
  725. hrsett
  726.          sta $d405,x
  727.          lda wave,x
  728.          and #$fe
  729.          sta $d404,x
  730.          lda #$00
  731.          sta andor,x
  732.          rts
  733.  
  734. nospeed0
  735.          cmp #1
  736.          bne sp2
  737. spp      lda speed1
  738.          beq sp1
  739.          lda durat,x
  740.          cmp #1
  741.          beq frame2
  742.          jmp nichts
  743. sp1
  744.          lda durat,x
  745.          cmp #3
  746.          bcs nichts
  747.          cmp #1
  748.          beq frame1
  749.          jmp frame2
  750.  
  751. sp2      lda durat,x
  752.          cmp #$01
  753.          bne nichts
  754.          lda speed1
  755.          beq frame1
  756.          cmp #3
  757.          bcc frame2
  758. nichts   jsr play3
  759.          jmp sid
  760.  
  761.  
  762.  
  763.  
  764. frame1
  765.          lda hardon,x
  766.          beq nichts
  767.          ldy sndn,x  ;this frame
  768.          lda srtab,y;new note = max.
  769.          sta sr,x   ;rastertime
  770.          sta $d406,x
  771.          lda adtab,y;sets the new
  772.          sta ad,x   ;adsr-settings
  773.          sta $d405,x;= beginning of a
  774.          lda #$09
  775.          sta $d404,x
  776.          sta wave,x
  777.          inc hardon,x
  778.          rts
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785. ;---------------------------------------
  786. ;        adsr-routines
  787. ;---------------------------------------
  788. play2    ldx #$00
  789.          jsr play3d
  790.          jsr sid2
  791.          ldx #7
  792.          jsr play3d
  793.          jsr sid2
  794.          ldx #14
  795.          jsr play3d
  796.          jmp sid2
  797. ;---------------------------------------
  798. play3
  799. ;---------------------------------------
  800. ;wave-freq-table-handling
  801. ;---------------------------------------
  802.          lda cut,x
  803.          beq ton
  804.          rts
  805. ton
  806. ;---------------------------------------
  807. ;filterroutine
  808. ;---------------------------------------
  809.          cpx filcon
  810.          bne glide
  811.          lda nofi
  812.          bne glide
  813.          lda filpos
  814.          tay
  815.          lda filtfrm
  816.          bne nonewf
  817. nochmalf lda filttab1,y
  818.          cmp #$90        ;check loop
  819.          bne fp1
  820.          lda filttab2,y
  821.          sta filpos
  822.          tay
  823.          jmp nochmalf
  824. fp1      cmp #$91        ;check stop
  825.          bne fp2
  826.          lda #1
  827.          sta nofi
  828.          bne glide
  829.  
  830.  
  831. fp2      sta filtaddh    ;count values
  832.          lda filttab2,y
  833.          sta filtaddl
  834.          lda filttab2+1,y
  835.          sta filtfrm
  836.          tya
  837.          clc
  838.          adc #2
  839.          sta filpos
  840. nonewf   lda filtlo
  841.          clc
  842.          adc filtaddl
  843.          sta filtlo
  844.          tay
  845.          and #7
  846.          sta filfreql
  847.          lda filthi
  848.          adc filtaddh
  849.          sta filthi
  850.          dec filtfrm
  851.  
  852.          lsr a
  853.          ror filtlo
  854.          lsr a
  855.          ror filtlo
  856.          lsr a
  857.          ror filtlo
  858.          lda filtlo
  859.          sta filfreqh
  860.          sty filtlo
  861.  
  862.  
  863.  
  864.  
  865. ;---------------------------------------
  866. ;vib/slide/etc.
  867. ;---------------------------------------
  868. glide
  869.          lda gll,x
  870.          bne gly      ;check if glide
  871.          lda glh,x    ;active
  872.          bne gly
  873.          jmp nogli
  874. gly
  875.          lda #0
  876.          sta vspeed,x
  877.          sta vilo,x    ;add values
  878.          sta vihi,x    ;disable vibr.
  879.          clc
  880.          lda glidel,x
  881.          adc gll,x
  882.          sta glidel,x
  883.          lda glideh,x
  884.          adc glh,x
  885.          sta glideh,x
  886.  
  887.          lda glh,x
  888.          bmi glup1
  889.          ldy noteok,x   ;reached
  890.          lda frqlo,y   ;destination
  891.          clc           ;frequence?
  892.          adc glidel,x  ;(upglide)
  893.          pha
  894.          lda frqhi,y
  895.          adc glideh,x
  896.          cmp gldeh,x
  897.          bcc glup2
  898.          bne glupen1
  899. glup4    pla
  900.          cmp gldel,x
  901.          bcc nogli
  902.  
  903.  
  904. glupen   lda #0        ;stop glide
  905.          sta glidel,x
  906.          sta glideh,x
  907.          sta gll,x
  908.          sta glh,x
  909.          lda glto,x
  910.          sta notev,x
  911.          sta noteok,x
  912.          jmp nogli
  913.  
  914. glup1
  915.          ldy noteok,x
  916.          lda frqlo,y   ;check destin.
  917.          clc           ;for downglide
  918.          adc glidel,x
  919.          pha
  920.          lda frqhi,y
  921.          adc glideh,x
  922.          cmp gldeh,x
  923.          bcc glupen1
  924.          bne glup2
  925.          pla
  926.          cmp gldel,x
  927.          bcs nogli
  928.          bcc glupen
  929. glupen1  pla
  930.          jmp glupen
  931.  
  932.  
  933.  
  934. glup2    pla
  935. ;---------------------------------------
  936. ;vibrato
  937. ;---------------------------------------
  938. nogli    lda vspeed,x
  939.          beq novib
  940.  
  941.          and #1
  942.          bne nvib
  943.          inc vifirst,x
  944. nvib     lda vdir,x     ;check direct.
  945.          bne vido       ;vib. up
  946.          lda vifirst,x
  947.          bne vi1
  948.          inc vifirst,x  ;halfvalue?
  949.          lda vaddl1,x
  950.          clc
  951.          adc vilo,x
  952.          sta vilo,x     ;add half
  953.          lda vaddh1,x
  954.          adc vihi,x
  955.          sta vihi,x
  956.          jmp vi2
  957. vi1      lda vaddl,x    ;add full
  958.          clc
  959.          adc vilo,x
  960.          sta vilo,x
  961.          lda vaddh,x
  962.          adc vihi,x
  963.          sta vihi,x
  964. vi2      inc vspeed1,x
  965.          lda vspeed1,x  ;dir.turn?
  966.          cmp vspeed,x
  967.          bne vi3
  968. vi4      lda #1
  969.          eor vdir,x
  970.          sta vdir,x
  971. vi3      jmp novib
  972. vido     lda vilo,x     ;vib. down
  973.          sec
  974.          sbc vaddl,x
  975.          sta vilo,x     ;sbc full
  976.          lda vihi,x
  977.          sbc vaddh,x
  978.          sta vihi,x
  979.          dec vspeed1,x
  980.          beq vi4
  981.          jmp novib
  982.  
  983. play3d   lda cut,x
  984.          beq novib
  985.          rts
  986.  
  987.  
  988. novib
  989. ;---------------------------------------
  990. ;wave/filt/pulse
  991. ;---------------------------------------
  992.          lda wvspeed1,x ;new row ?
  993.          cmp #$ff
  994.          beq nochnich
  995.          dec wvspeed1,x
  996.          bpl nochnich
  997.          lda wvspeed,x
  998.          sta wvspeed1,x
  999. newread  ldy wavepos,x
  1000.          inc wavepos,x
  1001.          lda wavetab,y
  1002.          cmp #$91      ;check stop
  1003.          beq schluss
  1004.          cmp #$90      ;check loop
  1005.          bne nextstep
  1006.          lda freqtab,y
  1007.          sta wavepos,x
  1008.          jmp newread
  1009. nextstep pha
  1010.          and #$f7     ;check drummode
  1011.          sta wave,x
  1012.          pla
  1013.          and #$08
  1014.          sta drum,x
  1015.          beq nodrum
  1016.          lda freqtab,y
  1017.          sta noteok,x
  1018.          jmp nochnich
  1019. nodrum   lda freqtab,y
  1020.          clc
  1021.          adc notev,x
  1022.          sta noteok,x
  1023.          jmp nochnich
  1024.  
  1025.  
  1026. schluss  lda #$ff       ;stop mark
  1027.          sta wvspeed1,x
  1028.          lda wave,x
  1029.          and #$40
  1030.          bne nochnich
  1031.          lda #1
  1032.          sta nopu,x
  1033.  
  1034.  
  1035. nochnich
  1036.  
  1037. ;---------------------------------------
  1038. ;pulsroutine
  1039. ;---------------------------------------
  1040.          lda nopu,x
  1041.          bne filli
  1042.          lda pupos,x
  1043.          tay
  1044.          lda pulsfrm,x   ;new row?
  1045.          bne nonewset
  1046. nochmal  lda pulstab1,y
  1047.          cmp #$90        ;check loop
  1048.          bne pp1
  1049.          lda pulstab2,y
  1050.          sta pupos,x
  1051.          tay
  1052.          jmp nochmal
  1053. pp1      cmp #$91        ;check stop
  1054.          bne pp2
  1055.          lda #1
  1056.          sta nopu,x
  1057.          bne filli
  1058.  
  1059.  
  1060. pp2      sta pulsaddh,x  ;count values
  1061.          lda pulstab2,y
  1062.          sta pulsaddl,x
  1063.          lda pulstab2+1,y
  1064.          sta pulsfrm,x
  1065.          tya
  1066.          clc
  1067.          adc #2
  1068.          sta pupos,x
  1069. nonewset lda pulslo,x
  1070.          clc              ;set values
  1071.          adc pulsaddl,x
  1072.          sta pulslo,x
  1073.          sta $d402,x
  1074.          lda pulshi,x
  1075.          adc pulsaddh,x
  1076.          sta pulshi,x
  1077.          sta $d403,x
  1078.          dec pulsfrm,x
  1079.  
  1080.  
  1081.  
  1082. filli
  1083. ;---------------------------------------
  1084. ;writing the SID-registers
  1085. ;---------------------------------------
  1086.          ldy noteok,x
  1087.          lda drum,x
  1088.          beq norm
  1089.          tya
  1090.          sta $d401,x
  1091.          lda #0
  1092.          sta $d400,x
  1093.          rts
  1094. norm
  1095.          clc
  1096.          lda vilo,x
  1097.          adc glidel,x
  1098.          sta help
  1099.          lda vihi,x
  1100.          adc glideh,x
  1101.          sta help+1
  1102.          lda frqlo,y
  1103.          clc
  1104.          adc help
  1105.          sta help
  1106.          lda help+1
  1107.          adc frqhi,y
  1108.          sta help+1
  1109.          lda help
  1110.          clc
  1111.          adc fine,x
  1112.          sta $d400,x
  1113.          lda help+1
  1114.          adc #0
  1115.          sta $d401,x
  1116. fip      rts
  1117.  
  1118. sid
  1119.          lda sr,x
  1120.          sta $d406,x
  1121.          lda ad,x     ;registers
  1122.          sta $d405,x
  1123.  
  1124.  
  1125.  
  1126. sid2
  1127.          lda hardon,x
  1128.          cmp #2
  1129.          beq witer
  1130.          lda wave,x
  1131.          tay         ;if gatebit off by
  1132.          and #1      ;table, disable
  1133.          beq nogat   ;gate command
  1134.          tya
  1135.          and #$fe
  1136.          ora andor,x
  1137.          tay
  1138. nogat    tya
  1139.          sta $d404,x  ;write remaining
  1140. witer
  1141.          rts
  1142.  
  1143.  
  1144.  
  1145. help     .byte $00,$00
  1146. ;---------------------------------------
  1147. ;Tables
  1148. ;---------------------------------------
  1149. frqlo    .byte $0c,$1c,$2d,$3e,$47,$66
  1150.          .byte $7b,$91,$a9,$c3,$dd,$fa
  1151.          .byte $18,$38,$5a,$7d,$a3,$cc
  1152.          .byte $f6,$23,$53,$86,$bb,$f4
  1153.          .byte $30,$70,$b4,$fb,$47,$98
  1154.          .byte $ed,$47,$a7,$0c,$77,$e9
  1155.          .byte $61,$e1,$68,$f7,$8f,$30
  1156.          .byte $da,$8f,$4e,$18,$ef,$d2
  1157.          .byte $c3,$c3,$d1,$ef,$1f,$60
  1158.          .byte $b5,$1e,$9c,$31,$df,$a5
  1159.          .byte $87,$86,$a2,$df,$3e,$c1
  1160.          .byte $6b,$3c,$39,$63,$be,$4b
  1161.          .byte $0f,$0c,$45,$bf,$7d,$83
  1162.          .byte $d6,$79,$73,$c7,$7c,$97
  1163.          .byte $1e,$18,$8b,$7e,$fa,$06
  1164.          .byte $ac,$f3,$e6,$8f,$f8,$fc
  1165. ;---------------------------------------
  1166. frqhi    .byte $01,$01,$01,$01,$01,$01
  1167.          .byte $01,$01,$01,$01,$01,$01
  1168.          .byte $02,$02,$02,$02,$02,$02
  1169.          .byte $02,$03,$03,$03,$03,$03
  1170.          .byte $04,$04,$04,$04,$05,$05
  1171.          .byte $05,$06,$06,$07,$07,$07
  1172.          .byte $08,$08,$09,$09,$0a,$0b
  1173.          .byte $0b,$0c,$0d,$0e,$0e,$0f
  1174.          .byte $10,$11,$12,$13,$15,$16
  1175.          .byte $17,$19,$1a,$1c,$1d,$1f
  1176.          .byte $21,$23,$25,$27,$2a,$2c
  1177.          .byte $2f,$32,$35,$38,$3b,$3f
  1178.          .byte $43,$47,$4b,$4f,$54,$59
  1179.          .byte $5e,$64,$6a,$70,$77,$7e
  1180.          .byte $86,$8e,$96,$9f,$a8,$b3
  1181.          .byte $bd,$c8,$d4,$e1,$ee,$fd
  1182.  
  1183. susa
  1184. ;---------------------------------------
  1185. contp    lda #1
  1186.          eor pcont,x
  1187.          sta pcont,x
  1188.          jmp nofx
  1189. ;---------------------------------------
  1190. sust     lda efflo,x
  1191.          sta sr,x
  1192.          jmp nofx
  1193. ;---------------------------------------
  1194. adr      lda efflo,x
  1195.          sta ad,x
  1196.          jmp nofx
  1197. ;---------------------------------------
  1198. vol      lda efflo,x
  1199.          asl a
  1200.          asl a
  1201.          asl a
  1202.          asl a
  1203.          sta svol,x
  1204.          jmp nofx
  1205. ;---------------------------------------
  1206. gld      ldy secpos,x
  1207.          iny
  1208.          lda #0
  1209.          sta glidel,x
  1210.          sta glideh,x
  1211.          lda ($f8),y
  1212.          pha
  1213.          cmp #$60
  1214.          bcc gl1
  1215.          sec
  1216.          sbc #$60
  1217. gl1      clc
  1218.          adc trpose,x
  1219.          sta glfrom,x
  1220.          iny
  1221. glsl     lda ($f8),y
  1222.          cmp #$60
  1223.          bcc gl2
  1224.          sec
  1225.          sbc #$60
  1226. gl2      clc
  1227.          adc trpose,x
  1228.          sta glto,x
  1229.          pha
  1230.          tay
  1231.          lda frqlo,y
  1232.          sta gldel,x
  1233.          lda frqhi,y
  1234.          sta gldeh,x
  1235.          pla
  1236.  
  1237.          cmp glfrom,x
  1238.          beq gl4
  1239.          bcs glup
  1240.          lda efflo,x
  1241.          eor #$ff
  1242.          clc
  1243.          adc #$01
  1244.          sta gll,x
  1245.          lda effhi,x
  1246.          eor #$ff
  1247.          adc #0
  1248.          sta glh,x
  1249.          lda #0
  1250.          beq gl3
  1251. glup
  1252.          lda efflo,x
  1253.          sta gll,x
  1254.          lda effhi,x
  1255.          sta glh,x
  1256. gl3
  1257.          pla
  1258.          inc secpos,x
  1259.          inc secpos,x
  1260.          jmp note
  1261. gl4
  1262.          lda #0
  1263.          sta gll,x
  1264.          beq gl3
  1265. ;---------------------------------------
  1266. sld      ldy secpos,x
  1267.          iny
  1268.          lda #0
  1269.          sta glidel,x
  1270.          sta glideh,x
  1271.          lda #1
  1272.          sta cont,x
  1273.          lda notev,x
  1274.          sta glfrom,x
  1275.          sec
  1276.          sbc trpose,x
  1277.          pha
  1278.          dec secpos,x
  1279.          lda #0
  1280.          beq glsl
  1281. ;---------------------------------------
  1282. vibr     lda efflo,x
  1283.          sta vaddl,x
  1284.          sta vaddl1,x
  1285.          lda effhi,x
  1286.          and #$0f
  1287.          sta vaddh,x
  1288.          lsr a
  1289.          sta vaddh1,x
  1290.          ror vaddl1,x
  1291.          lda effhi,x
  1292.          lsr a
  1293.          lsr a
  1294.          lsr a
  1295.          lsr a
  1296.          sta vspeed,x
  1297.          lsr a
  1298.          sta vspeed1,x
  1299.          lda #0
  1300.          sta vilo,x
  1301.          sta vihi,x
  1302.          sta vifirst,x
  1303.          sta vdir,x
  1304.          jmp nofx
  1305. ;---------------------------------------
  1306. flt      lda efflo,x
  1307.          tay
  1308.          and #$f0
  1309.          beq fltvo
  1310.          sta filtyp
  1311.          tya
  1312.          asl a
  1313.          asl a
  1314.          asl a
  1315.          asl a
  1316.          sta resonance
  1317.          lda filcon
  1318.          and #$7f
  1319.          sta filcon
  1320.  
  1321.          lda filcont,x
  1322.          ora filconf
  1323.          sta filconf
  1324.          jmp nofx
  1325. fltvo    lda filconf
  1326.          and filcont1,x
  1327.          sta filconf
  1328.          bne fltvo1
  1329.          lda filcon
  1330.          ora #$80
  1331.          sta filcon
  1332. fltvo1   jmp nofx
  1333. ;---------------------------------------
  1334. contf    lda #1
  1335.          eor fcont
  1336.          sta fcont
  1337.          jmp nofx
  1338. ;---------------------------------------
  1339. frq      lda efflo,x
  1340.          ora effhi,x
  1341.          beq frq2
  1342.          sta frqf
  1343.          lda efflo,x
  1344.          sta flo
  1345.          lda effhi,x
  1346.          and #7
  1347.          sta fhi
  1348.          jmp nofx
  1349. frq2     lda #0
  1350.          sta frqf
  1351.          jmp nofx
  1352. ;---------------------------------------
  1353. arp      lda efflo,x
  1354.          sta wavexpos,x
  1355.          lda effhi,x
  1356.          and #$0f
  1357.          sta xwvspeed,x
  1358.          jmp nofx
  1359. ;---------------------------------------
  1360. fne      lda efflo,x
  1361.          sta fine,x
  1362.          jmp nofx
  1363. send
  1364. ;---------------------------------------
  1365. ;---------------------------------------
  1366. ;supercommands
  1367. ;---------------------------------------
  1368. ;00 - nothing
  1369. ;01 - cont. pulse (no pulse restart)
  1370. ;02 - srr.xx
  1371. ;03 - adr.xx
  1372. ;04 - vol.xx
  1373. ;05 - gld.xxxx
  1374. ;06 - sld.xxxx
  1375. ;07 - vib.xxxx
  1376. ;08 - flt.xy       x=type,y=resonance
  1377. ;09 - cont. filt  (no filter restart)
  1378. ;0a - frq.xxx
  1379. ;0b - arp.yxx   y=new speed x=new point
  1380. ;---------------------------------------
  1381.  
  1382. commtab  = $3d40
  1383. commtab1 = $3d80
  1384. commtab2 = $3dc0
  1385.          *= $0f80
  1386. commtab3
  1387.          .word nofx,contp,sust,adr,vol
  1388.          .word gld,sld,vibr,flt,contf
  1389.          .word frq,arp,fne,send
  1390.  
  1391.  
  1392.          *= $0fe0
  1393.          .word trpos,wspeed,susa
  1394.  
  1395. ;---------------------------------------
  1396. trakk    = $3e00
  1397.  
  1398. ;---------------------------------------
  1399. seclo    = $3f00
  1400.  
  1401. sechi    = $3f80
  1402.  
  1403. ;---------------------------------------
  1404. ;commands
  1405.          ;$ff xx    loop xx
  1406.          ;$fe       stop voice
  1407.          ;$fd xx    transpose +xx
  1408.          ;$fc xx    transpose -xx
  1409.          ;$fb xx    fadein  xx
  1410.          ;$fa xx    fadeout xx
  1411.          ;$ex       volume x
  1412.  
  1413. ;---------------------------------------
  1414. ;---------------------------------------
  1415. ;commands  $fd.xx   dur xx
  1416.           ;$fc.xx   snd xx
  1417.           ;$fe      cont(---)
  1418.           ;$fb      gate
  1419.           ;$fa      switch
  1420.           ;$f9      cut
  1421.  
  1422.  
  1423.  
  1424. ;---------------------------------------
  1425.  
  1426. ;---------------------------------------
  1427. ;instrument data
  1428. ;---------------------------------------
  1429. adtab    = $4000
  1430. srtab    = $4100
  1431. wavptab  = $4200
  1432. pulptab  = $4300
  1433. filptab  = $4400
  1434. efftab   = $4500
  1435.  
  1436.  
  1437. wavetab  = $4600
  1438.  
  1439. freqtab  = $4700
  1440.  
  1441. pulstab1 = $4800
  1442.  
  1443. pulstab2 = $4900
  1444.  
  1445. filttab1 = $4a00
  1446. filttab2 = $4b00
  1447.  
  1448. ;---------------------------------------
  1449.  
  1450.